package done.easy_401_500;

import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 409. Longest Palindrome 最长回文串
 * <p>
 * 给定一个包含大写字母和小写字母的字符串，找到通过这些字母构造成的最长的回文串。
 * 在构造过程中，请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
 * 注意: 假设字符串的长度不会超过 1010。
 * <p>
 * 示例 1:
 * 输入: "abccccdd"
 * 输出: 7
 * 解释:
 * 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7
 * <p>
 * 【笔记】
 * 核心思想，计算数字成对出现的字母数量。如果存在一个以上的奇数次出现的字母，则结果加一。（评论改良java版）
 * 无序列表字母ASCII码A~Za~z区间为（65～122）为此，可以使用128的数组标记每个字母出现的次数。
 * 字母出现一次则对应位置记为1，出现两次记为0（同时length统计该字母出现了2次）。
 * 如果所有成对出现的字母数量，小于字符串总长度，则必存在一个以上的奇数次出现的字母。 那么
 * <p>
 * 2019-04-14 4:02 PM
 **/
@SuppressWarnings("all")
public class LongestPalindrome {

    public int longestPalindrome(String s) {
        // first 20200722
        return -1;
    }

    @Test
    public void test() {
        info("7 -> {}", longestPalindrome("abccccdd"));
//        info("{}" , ~0);
//        info("{}" , ~(-1));
    }
}





























/*
public int longestPalindrome(String s) {
    int[] flag = new int[128];
    int length = 0;

    for (int i = 0; i < s.length(); ++i) {
        int index = s.charAt(i);

        // 取反
        // ~0 == -1
        // ~-1 == 0
        flag[index] = ~flag[index];

        if (flag[index] == 0) {
            length += 2;
        }
    }
    return length < s.length() ? length + 1 : length;
}
*/